package org.noote.libs.assistant.agent;

import java.util.ArrayList;

import org.noote.libs.assistant.Agent;
import org.noote.libs.assistant.agent.majordome.Module;
import org.noote.libs.assistant.agent.majordome.Module_Calendrier;
import org.noote.libs.assistant.agent.majordome.Module_Contacts;
import org.noote.libs.assistant.agent.majordome.Module_Lieu;
import org.noote.libs.assistant.agent.majordome.Module_Meteo;
import org.noote.libs.assistant.analyse.Phrase;

public class Agent_Majordome implements Agent {
	
	ArrayList<Module> _modules = new ArrayList<Module>();

	@Override
	public boolean reconnaitrePersonne(String sNom) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean creerPersonne(String sNom) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public String repondre(Phrase phrase) {
		String sGlobalRes = "";
		for(Module mod : _modules)
		{
			String sResp="";
			if(mod.responce(phrase, sResp))
				sGlobalRes += sResp;
		}
		return sGlobalRes;
	}

	public Agent_Majordome()
	{
		create();
	}
	
	public boolean create()
	{
		insertModule(new Module_Contacts());
		insertModule(new Module_Calendrier());
		insertModule(new Module_Lieu());
		insertModule(new Module_Meteo());
		
		return true;
	}
	
	public boolean insertModule(Module mModule)
	{
		if(_modules.indexOf(mModule) != -1) return true;
		
		// check dependencies
		{
			ArrayList<String> sDeps = mModule.getDependencies();
			for(String sDep : sDeps)
			{
				for(Module mod : _modules)
				{
					if(mod.getName().equalsIgnoreCase(sDep))
					{
						mModule.attachDependency(mod.getName(), mod);
					}
				}
			}
		}
		
		{
			for(Module mod : _modules)
			{
				ArrayList<String> sDeps = mModule.getDependencies();
				for(String sDep : sDeps)
				{
					if(sDep.equalsIgnoreCase(mModule.getName()))
					{
						mod.attachDependency(mModule.getName(), mModule);
					}
				}
			}
		}
		
		return _modules.add(mModule);
	}
}
